上一篇講完了簡單的 Dockerfile 用法,接著就要來講一下比較深入的用法了。
首先先來看一下常用的 Dockerfile 指令
Keyword | Discription |
---|---|
FROM <image_name>[:<image_tag>] | 基礎映像。 |
COPY <src> <dest> | 複製。規則需符合 Go 的 filepath.Match。 |
ADD | 同 COPY,但複製 tar 壓縮文件時會自動解壓。同需求下推薦用 COPY |
RUN <command> orRUN ["command", "arg1", "arg2", ...] | 執行。在 Dockerfile build 時執行。 |
*CMD | 類似 RUN 。但在 docker run 時執行,且有多行時只會執行最後一行。如果啟動時有指定其他指令會被忽略。 |
*ENTRYPOINT | 類似 CMD 。但一定會被執行。 |
WORKDIR <dir_name> | 設定工作目錄。建立的工作目錄會存在於每一層。如果不存在會自動建立。 |
EXPOSE <port_number> | 開放 PORT。僅宣告,要連進該服務需使用 publish。 |
ENV <key>=<value> | 環境變數。 |
ARG | 類似 ENV 。但僅在 dockerfile 作用。 |
* 如果有多行同時存在時,只會執行最後一行。
- Dockerfile 撰寫規則中規定必須包含至少 1 個
CMD
或ENTRYPOINT
在內(但沒有好像也不會怎樣)。- Dockerfile 的指令每執行一次都會在 docker 上新建一層 (Layer)。所以過多無意義的層,會造成 Image 膨脹過大。
- 最多到 127 層 (Layer)
接著我們一一介紹各個指令的用途吧。
第一個 FROM
昨天介紹過了,就是指定接下來的開發環境。
第二個 COPY
跟第三個 ADD
作用都是將檔案或資料夾複製到 Image 內,不過如果複製的檔案是 tar
的壓縮文件時, ADD
會自動解壓縮後再複製進去。官方文件中推薦如果沒有特殊需求建議使用 COPY
。
第四個 RUN
昨天也已經介紹過了,作用是在 Image 建立的過程中處裡某些東西,例如安裝套件或是其他的操作。
第五個 CMD
跟第六個 ENTRYPOINT
都是在啟動 Container 時才會執行的指令,
第七個 WORKDIR
昨天也介紹過了,就是指定接下來的工作目錄。
第八個 EXPOSE
昨天也介紹過了,就是宣告要開放的 PORT 。
第九個 ENV
跟第十個 ARG
都是用於設定環境變數,不過有點差別,我們先來看看個別作用個區域。
上面這張圖很清楚的標示了 ARG
跟 ENV
作用的區域, ARG
主要是在 Image 建立過程中使用的環境變數,大概就是安裝套件時用來指定版本使用; ENV
則是執行時所需使用的環境變數。
那麼就先到這邊, Dockerfile 的基本使用大概就是這樣, Dockerfile 超過一半以上都是在使用這些指令,只要使用熟悉,就可以順利地建構出各種 Image 了。
大家掰~掰~